L07: Textové editory, kódování znaků

linux.edumach.cz



1. Východiska

Klíčovým programem v unixových systémech je textový editor. Důvodem je, že veškerá konfigurace se provádí pomocí textových souborů. K dispozici je jich několik. Potíž je, že každý je zcela jiný – vzhled, ovládání...

S tím se úzce pojí také problematika kódování znaků a další související věci. I to probereme.

2. Editor nano

Textový editor nano je v vcelku rozumná dobrá volba už proto, že je předinstalovaný ve všech linuxových distribucích. V macOS je ve výchozí instalaci editor pico, nano jde volitelně nainstalovat.

2.1. Nový soubor

$ nano 

Spustí nano a založí nový nepojmenovaný soubor. Při uložení se zeptá na název.

2.2. Otevření (nebo vytvoření)

$ nano <soubor> 

Otevře soubor k editaci. Pokud neexistuje, založí nový soubor s tímto názvem.

⚠️ Zde se často chybuje, pokud nepoužíváte k doplňování cest a názvu klávesu TAB.

2.3. Uložení a zavření

2.4. Užitečné přepínače

Zobrazí čísla řádků:

$ nano -lD <soubor> 

Otevře soubor na zvoleném řádku (zde řádek 42):

$ nano +42 <soubor> 

Zalomí dlouhé řádky:

$ nano -$ <soubor> 

2.5. Konfigurace .nanorc

Do konfiguračního souboru ~/.nanorc si uložte tyto řádky (používám já):

set softwrap 
set linenumbers 
set numbercolor yellow 
set tabsize 4 
set tabstospaces 
set titlecolor blue,cyan 
set keycolor cyan 
set functioncolor cyan 
set smarthome 

Další na https://www.nano-editor.org/dist/latest/nanorc.5.html

3. Kódování znaků, ASCII

3.1. ASCII tabulka

$ ascii -d 

Příkaz zobrazí základní část ASCII tabulky (prvních 128 znaků):

    0 NUL    16 DLE    32      48 0    64 @    80 P    96 `   112 p 
    1 SOH    17 DC1    33 !    49 1    65 A    81 Q    97 a   113 q 
    2 STX    18 DC2    34 "    50 2    66 B    82 R    98 b   114 r 
    3 ETX    19 DC3    35 #    51 3    67 C    83 S    99 c   115 s 
    4 EOT    20 DC4    36 $    52 4    68 D    84 T   100 d   116 t 
    5 ENQ    21 NAK    37 %    53 5    69 E    85 U   101 e   117 u 
    6 ACK    22 SYN    38 &    54 6    70 F    86 V   102 f   118 v 
    7 BEL    23 ETB    39 '    55 7    71 G    87 W   103 g   119 w 
    8 BS     24 CAN    40 (    56 8    72 H    88 X   104 h   120 x 
    9 HT     25 EM     41 )    57 9    73 I    89 Y   105 i   121 y 
   10 LF     26 SUB    42 *    58 :    74 J    90 Z   106 j   122 z 
   11 VT     27 ESC    43 +    59 ;    75 K    91 [   107 k   123 { 
   12 FF     28 FS     44 ,    60 <    76 L    92 \   108 l   124 | 
   13 CR     29 GS     45 -    61 =    77 M    93 ]   109 m   125 } 
   14 SO     30 RS     46 .    62 >    78 N    94 ^   110 n   126 ~ 
   15 SI     31 US     47 /    63 ?    79 O    95 _   111 o   127 DEL

3.2. Typy konců řádků

Kódování konců řádků je způsob, jakým jsou konce řádků reprezentovány v textových souborech. Existují tři hlavní typy kódování:

Znaky CR a LF pochází ještě z éry dálnopisné komunikace, kdy to mělo smysl (video s ukázkou).

Proč je důležité o tom vědět? Použití správného kódování konců řádků je důležité pro správné zobrazení textových souborů v různých operačních systémech a textových editorech.

3.3. Převod kódování

Pro převod souboru s Windows konci řádků stačí odstranit "nadbytečný" znak CR (\r):

$ cat win_file | tr -d $'\r' > unix_file

-d odstraňuje znak \r, který je na konci řádku $.

3.4. Příkaz file

Příkaz file zobrazí typ souboru, kódování a typ ukončení řádků, pokud není LF. Syntaxe příkazu je:

$ file <soubor> 

Příkaz vrátí jeden z následujících výstupů:

file1: ASCII text 
file2: ASCII text, with CR line terminators 
file3: ASCII text, with CRLF line terminators 
file4: Little-endian UTF-16 Unicode text, with very long lines, with CRLF line terminators 

4. Příkaz xxd

Příkaz xxd vypíše obsah souboru v hexadecimálně (výchozí způsob) nebo binárně (-b). Přepínač -u vypisuje písmena v hexa výstupu velkými písmeny (ABCDEF).

$ xxd <soubor> 
$ xxd -b <soubor> 
$ echo "Panska" | xxd 

Příklady:

$ xxd file.txt 
00000000: 4a61 726f 2c20 6c65 746f 0a Jaro, leto. 
$ xxd -u file.txt 
00000000: 4A61 726F 2C20 6C65 746F 0A Jaro, leto. 
$ xxd -b file.txt 
00000000: 01001010 01100001 01110010 01101111 Jaro 
00000004: 00101100 00100000 01101100 01100101 , le 
00000008: 01110100 01101111 00001010          to. 

5. Příkaz iconv

Příkaz iconv převede soubor z jednoho kódování (-f) do jiného (-t). Výstup posílá na terminál. S parametrem -o [soubor] jej uloží do souboru.

iconv [soubor] [-f kodovani] [-t kodovani] [-o soubor] 

Seznam všech podporovaných kódování vypíše příkaz s parametrem (-l). Je jich opravdu hodně:

$ iconv -l

V Linuxu jej nejčastěji využijete pro převod do "čistého" ASCII kódování (odstranění diakritiky). To vyžaduje dodatečný parametr //TRANSLIT:

$ iconv file -f UTF-8 -t ASCII//TRANSLIT -o file_plain